/*******************************************************************************
* Copyright (c) 2004, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.presentations.util;
/**
*/
public class ReplaceDragHandler extends TabDragHandler {
private final class DragCookie {
int insertPosition;
public DragCookie(int pos) {
insertPosition = pos;
}
}
private AbstractTabFolder tabFolder;
public ReplaceDragHandler(AbstractTabFolder folder) {
this.tabFolder = folder;
}
// RAP [bm]:
/* (non-Javadoc)
* @see org.eclipse.ui.internal.presentations.util.TabDragHandler#dragOver(org.eclipse.swt.widgets.Control, org.eclipse.swt.graphics.Point)
*/
// public StackDropResult dragOver(Control currentControl, Point location,
// int dragStart) {
//
// // Determine which tab we're currently dragging over
// //Point localPos = tabFolder.getControl().toControl(location);
//
// AbstractTabItem tabUnderPointer = tabFolder.getItem(location);
//
// // This drop target only deals with tabs... if we're not dragging over
// // a tab, exit.
// if (tabUnderPointer == null) {
// Rectangle titleArea = tabFolder.getTabArea();
//
// // If we're dragging over the title area, treat this as a drop in the last
// // tab position.
// if (titleArea.contains(location) && tabFolder.getItemCount() > 0) {
// int dragOverIndex = tabFolder.getItemCount();
// AbstractTabItem lastTab = tabFolder.getItem(dragOverIndex - 1);
//
// // Can't drag to end unless you can see the end
// if (!lastTab.isShowing()) {
// return null;
// }
//
// // If we are unable to compute the bounds for this tab, then ignore the drop
// Rectangle lastTabBounds = lastTab.getBounds();
// if (lastTabBounds.isEmpty()) {
// return null;
// }
//
// if (dragStart >= 0) {
// dragOverIndex--;
//
// return new StackDropResult(lastTabBounds, new Integer(
// dragOverIndex));
// }
//
// // Make the drag-over rectangle look like a tab at the end of the tab region.
// // We don't actually know how wide the tab will be when it's dropped, so just
// // make it 3 times wider than it is tall.
// Rectangle dropRectangle = titleArea;
//
// dropRectangle.x = lastTabBounds.x + lastTabBounds.width;
// dropRectangle.width = 3 * dropRectangle.height;
// return new StackDropResult(dropRectangle, new Integer(
// dragOverIndex));
//
// } else {
// // If the closest side is the side with the tabs, consider this a stack operation.
// // Otherwise, let the drop fall through to whatever the default behavior is
// Rectangle displayBounds = DragUtil.getDisplayBounds(tabFolder.getControl());
// int closestSide = Geometry.getClosestSide(displayBounds, location);
// if (closestSide == tabFolder.getTabPosition()) {
// return new StackDropResult(displayBounds, null);
// }
//
// return null;
// }
// }
//
// if (!tabUnderPointer.isShowing()) {
// return null;
// }
//
// Rectangle tabBounds = tabUnderPointer.getBounds();
//
// if (tabBounds.isEmpty()) {
// return null;
// }
//
// return new StackDropResult(tabBounds, new DragCookie(tabFolder
// .indexOf(tabUnderPointer)));
// }
/* (non-Javadoc)
* @see org.eclipse.ui.internal.presentations.util.TabDragHandler#getInsertionPosition(java.lang.Object)
*/
public int getInsertionPosition(Object cookie) {
if (cookie instanceof DragCookie) {
return Math.min(tabFolder.getItemCount(),
((DragCookie) cookie).insertPosition);
}
return tabFolder.getItemCount();
}
}